/**
 * 
 */
package com.mbengue.corp.apr.ra.dao.impl;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.mbengue.corp.apr.ra.core.Evenement;
import com.mbengue.corp.apr.ra.dao.EvenementDao;
import com.mbengue.corp.apr.ra.util.HibernateUtil;

/**
 * @author MMB11447
 *
 */
public class EvenementDaoImpl implements EvenementDao {
  private static final long serialVersionUID = 1L;
  private Session session;

  public EvenementDaoImpl() {
    session = HibernateUtil.getSessionFactory();
  }

  /* (non-Javadoc)
   * @see com.mbengue.corp.apr.ra.dao.EvenementDao#trouverEvenementParTitre(java.lang.String)
   */
  @SuppressWarnings("unchecked")
  @Override
  public List<Evenement> trouverEvenementParTitre(String titre) {
    Query query = session.getNamedQuery("findParTitre");
    query.setParameter("titre", titre);
    return query.list();
  }

  @SuppressWarnings("unchecked")
  @Override
  public List<Evenement> trouverEvenementParDates(Date debut, Date fin) {
    Criteria criteria = session.createCriteria(Evenement.class);
    criteria.add(Restrictions.between("debut", debut, fin));
    return criteria.list();
  }

  @Override
  public void ajouter(Evenement aObjet) throws HibernateException {
    Transaction transaction = session.beginTransaction();
    try {
      session.save(aObjet);
      transaction.commit();
    } catch (Exception e) {
      transaction.rollback();
      throw new HibernateException(e);
    } finally {
      session.flush();
      //session.close();
    }
  }

  @Override
  public Evenement modifier(Evenement aObjet) throws HibernateException {
    //Evenement event = trouver(aObjet.getId());
    return null;
  }

  @Override
  public void supprimer(Evenement aObjet) throws HibernateException {
    Transaction tra = session.beginTransaction();
    session.delete(aObjet);
    tra.commit();
  }

  @Override
  public Evenement trouver(Long aKey) throws HibernateException {
    Criteria criteria = session.createCriteria(Evenement.class);
    criteria.add(Restrictions.eq("id", aKey));
    return (Evenement) criteria.uniqueResult();
  }
}
